package com.example.stmp.Service.AdministrativeClass;

import com.example.stmp.dto.AdministrativeClassDTO;
import com.example.stmp.Entity.AdministrativeClass;
import com.example.stmp.Mapper.AdministrativeClassMapper;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 实现行政班级服务接口，提供行政班级相关操作的实现类
 */
@Service
@Slf4j
public class AdministrativeClassServiceImpl implements AdministrativeClassService {

    @Resource
    private AdministrativeClassMapper administrativeClassMapper;

    /**
     * 将行政班级DTO转换为实体对象
     *
     * @param dto 行政班级DTO
     * @return 转换后的行政班级实体对象
     */
    private AdministrativeClass dtoToEntity(AdministrativeClassDTO dto) {
        AdministrativeClass entity = new AdministrativeClass();
        entity.setAcId(dto.getAcId());
        entity.setAcName(dto.getAcName());
        entity.setCounselor(dto.getCounselor());
        entity.setMajorId(dto.getMajorId());
        entity.setCreateTime(dto.getCreateTime());
        entity.setLastUpdateTime(dto.getLastUpdateTime());
        return entity;
    }

    /**
     * 将行政班级实体对象转换为DTO
     *
     * @param entity 行政班级实体对象
     * @return 转换后的行政班级DTO
     */
    private AdministrativeClassDTO entityToDto(AdministrativeClass entity) {
        AdministrativeClassDTO dto = new AdministrativeClassDTO();
        dto.setAcId(entity.getAcId());
        dto.setAcName(entity.getAcName());
        dto.setCounselor(entity.getCounselor());
        dto.setMajorId(entity.getMajorId());
        dto.setCreateTime(entity.getCreateTime());
        dto.setLastUpdateTime(entity.getLastUpdateTime());
        // 专业名称由查询SQL返回时填充
        return dto;
    }

    /**
     * 添加行政班级
     *
     * @param dto 行政班级DTO
     * @return 插入结果
     */
    @Override
    public int addAdministrativeClass(AdministrativeClassDTO dto) {
        return administrativeClassMapper.insertAdministrativeClass(dtoToEntity(dto));
    }

    /**
     * 批量添加行政班级
     *
     * @param dtoList 行政班级DTO列表
     * @return 批量插入结果
     */
    @Override
    public int addAdministrativeClassBatch(List<AdministrativeClassDTO> dtoList) {
        List<AdministrativeClass> entities = dtoList.stream().map(this::dtoToEntity).collect(Collectors.toList());
        return administrativeClassMapper.insertAdministrativeClassBatch(entities);
    }

    /**
     * 根据ID删除行政班级
     *
     * @param acId 行政班级ID
     * @return 删除结果
     */
    @Override
    public int deleteAdministrativeClassById(String acId) {
        return administrativeClassMapper.deleteAdministrativeClassById(acId);
    }

    /**
     * 更新行政班级信息
     *
     * @param dto 行政班级DTO
     * @return 更新结果
     */
    @Override
    public int updateAdministrativeClass(AdministrativeClassDTO dto) {
        return administrativeClassMapper.updateAdministrativeClass(dtoToEntity(dto));
    }

    /**
     * 根据ID获取行政班级信息
     *
     * @param acId 行政班级ID
     * @return 行政班级DTO
     */
    @Override
    public AdministrativeClassDTO getAdministrativeClassById(String acId) {
        AdministrativeClass entity = administrativeClassMapper.selectAdministrativeClassById(acId);
        return entity != null ? entityToDto(entity) : null;
    }

    /**
     * 查询行政班级信息
     *
     * @param acName    行政班级名称
     * @param counselor 班主任
     * @param majorName 专业名称
     * @return 行政班级DTO列表
     */
    @Override
    public List<AdministrativeClassDTO> queryAdministrativeClass(String acName, String counselor, String majorName) {
        List<AdministrativeClass> list = administrativeClassMapper.selectAdministrativeClassByCondition(acName, counselor, majorName);
        return list.stream().map(this::entityToDto).collect(Collectors.toList());
    }
}
